#include <vector>
using namespace std;


// version 1
class Solution {
public:
//找两边太困难，转化为题为找中间一段最长的数组区间，、
//使得区间内所有的和 = 整个数组数字的和 - x
    int minOperations(vector<int>& nums, int x) {
        int sum = 0;
        for(auto& num : nums) 
            sum += num;
        int target = sum - x;
        if(target < 0) return -1;
        else if(target == 0) return nums.size();

        else{
            //此时，问题就转化到，找到一个连续的区间(哪怕是左边第一个数字开头或者右边第一个数字开头也不怕)
            //就类似于找到最短区间和 = target一样，只不过这里是最长
            int ret = 0, get_sum = 0;
            for(int left = 0, right = 0; right < nums.size(); ++right){
                //1.不管怎么样，先入窗口
                get_sum += nums[right];
                while(get_sum > target)
                    get_sum -= nums[left++];
                //这里放在外面更新长度
                if(get_sum == target) ret = (right - left + 1) > ret ? right - left + 1: ret;
            }
            //ret = std::max(ret, right - left);
            return (ret == 0) ? -1 : nums.size() - ret;
        }
    }
};